import http from 'wechat-http'

// 配置一下接口基地址
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
http.intercept.request = (params) => {
  // 读取全局的token 
  const token = getApp().token
  // 提供一个默认配置对象 好维护
  const defaultHeader = {

  }
  // 不好维护
  // params.header.a = 'xxx'
  // params.header.b = 'bbbb'

  // 给header拓展上字段 Authorization : token
  if (token) defaultHeader.Authorization = token
  params.header = Object.assign(defaultHeader, params.header)
  // console.log('params+++++', params)

  return params
}


// 配置响应拦截器
http.intercept.response = async ({ statusCode, data, config }) => {
  // 打印响应的结果看一下
  // console.log('++++++', config)
  // 当状态码statusCode为 401时,调用接口延长token有效期
  if (statusCode === 401) {

    // 如果refreshToken这个接口401 代表refresh_token都过期了 就得去登录了
    if (config.url.includes('/refreshToken')) {
      // 先获取当前的页面地址 用于之后登录成功回跳
      // 读取历史栈
      const pageStack = getCurrentPages()
      // 找出当前页
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前路径 route
      const redirectURL = lastPage.route

      // 重定向去登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=${redirectURL}`
      })
    }


    // 需要使用到refresh_token 从app上拿
    const app = getApp()
    // 如果本地都没有refresh_token 那么直接return
    if (!app.refresh_token) return
    console.log('refresh_token', app.refresh_token)
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这里面拼接的是refresh_token
        Authorization: app.refresh_token
      }
    })
    // console.log('res++++', res)
    app.setToken(res.data.token, res.data.refreshToken)
    // config里的url就是我们想去请求的 config就是我们想要请求的参数(无感请求)
    console.log('我是config', config)
    return http(
      Object.assign(config, {
        // 新获取的token拼接
        header: {
          Authorization: app.token
        }
      })
    )

  }


  return data
}


// 挂载方法到全局
wx.http = http

// 模块导出

export default http